#include <iostream>
#include <exception>
#include <stdexcept>
#include <thread>
#include <future>

void throwFunction() {
    throw std::runtime_error("出现错误");
}

void threadFunction(std::promise<void>& prom) {
    try {
        throwFunction();
    } catch (...) {
        // 捕获所有异常，并存储到 promise 对象中
        prom.set_exception(std::current_exception());
    }
}

int main() {
    std::promise<void> prom;
    std::future<void> fut = prom.get_future();
    std::thread t(threadFunction, std::ref(prom));

    try {
        fut.get();  // 在主线程中等待异步任务的结果，如果有异常则会在此抛出
    } catch (const std::exception& e) {
        std::cout << "主线程捕获到异常: " << e.what() << std::endl;
    }

    t.join();
    return 0;
}